package de.fhwf.mixedreality.client;


public interface IMovements {

	/**
	 * This makes the robot go toward a vector, turning and making curves when
	 * necessary.
	 */
	public abstract void goTo(Vector target);

	/**
	 * Set the velocity of the wheels. Any combination of the follwing velocities
	 * is possible: -4, -3, -2, -1, 0, 1, 2, 3, 4
	 */
	public abstract void setVelocity(int left, int right);

	/**
	 * Directly set the velocity of the wheels.
	 * The allowed range for the values depends on the robot version used:
	 * 2007:   -4 .. 0 ..   4
	 * 2008: -130 .. 0 .. 130 (mm/sec)
	 */
	public abstract void setRawSpeed(int left, int right);
	
	/**
	 * Makes the robot go straight with same velocity for both wheels. The allowed
	 * velocities are: -4, -3, -2, -1, 0, 1, 2, 3, 4
	 */
	public abstract void goStraight(int speed);

	/** Stops the robot */
	public abstract void stop();

	/** Makes the robot turn left */
	public abstract void turnLeft();

	/** Makes the robot turn right */
	public abstract void turnRight();

	/** Makes the robot go in a curve with a trajectory of an arc to the left */
	public abstract void curveLeft();

	/** Makes the robot go in a curve with a trajectory of an arc to the right */
	public abstract void curveRight();

	public abstract void fastForward();

	public abstract void fastBackward();

	/**
	 * This makes the robot go toward a vector, turning and making curves when
	 * necessary.
	 */
	public abstract void chase(Vector target);

	/**
	 * This is the oposite of goTo, making the robot escape away from the given
	 * vector.
	 */
	public abstract void escapeFrom(Vector enemy);

	/**
	 * This function makes the robot kick the ball. The angle gives the direction
	 * of the kick, the strength the force applied. Strenght 0 - 1; Angle Radiant
	 * -pi - +pi
	 */
	public abstract void kick(double angle, double strength);

	/** Tells whether the robot can kick or not. */
	public abstract boolean canKick();

	/**
	 * Lets the server move the robot towards a vector. Used for repositioning.
	 */
	public abstract void serverGoTo(Vector target);
}